Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Code coverage</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Code_coverage"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.math.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Code_coverage rootpage-Code_coverage skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Code coverage</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable">This article is about coverage based on source code. For coverage based on requirements, see <a href="Test_coverage" class="mw-redirect" title="Test coverage">Test coverage</a>.</div>
<style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}


/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1246091330">
/* start https://en.wikipedia.org/ */


.mw-parser-output .sidebar{width:22em;float:right;clear:right;margin:0.5em 0 1em 1em;background:var(--background-color-neutral-subtle,#f8f9fa);border:1px solid var(--border-color-base,#a2a9b1);padding:0.2em;text-align:center;line-height:1.4em;font-size:88%;border-collapse:collapse;display:table}body.skin-minerva .mw-parser-output .sidebar{display:table!important;float:right!important;margin:0.5em 0 1em 1em!important}.mw-parser-output .sidebar-subgroup{width:100%;margin:0;border-spacing:0}.mw-parser-output .sidebar-left{float:left;clear:left;margin:0.5em 1em 1em 0}.mw-parser-output .sidebar-none{float:none;clear:both;margin:0.5em 1em 1em 0}.mw-parser-output .sidebar-outer-title{padding:0 0.4em 0.2em;font-size:125%;line-height:1.2em;font-weight:bold}.mw-parser-output .sidebar-top-image{padding:0.4em}.mw-parser-output .sidebar-top-caption,.mw-parser-output .sidebar-pretitle-with-top-image,.mw-parser-output .sidebar-caption{padding:0.2em 0.4em 0;line-height:1.2em}.mw-parser-output .sidebar-pretitle{padding:0.4em 0.4em 0;line-height:1.2em}.mw-parser-output .sidebar-title,.mw-parser-output .sidebar-title-with-pretitle{padding:0.2em 0.8em;font-size:145%;line-height:1.2em}.mw-parser-output .sidebar-title-with-pretitle{padding:0.1em 0.4em}.mw-parser-output .sidebar-image{padding:0.2em 0.4em 0.4em}.mw-parser-output .sidebar-heading{padding:0.1em 0.4em}.mw-parser-output .sidebar-content{padding:0 0.5em 0.4em}.mw-parser-output .sidebar-content-with-subgroup{padding:0.1em 0.4em 0.2em}.mw-parser-output .sidebar-above,.mw-parser-output .sidebar-below{padding:0.3em 0.8em;font-weight:bold}.mw-parser-output .sidebar-collapse .sidebar-above,.mw-parser-output .sidebar-collapse .sidebar-below{border-top:1px solid #aaa;border-bottom:1px solid #aaa}.mw-parser-output .sidebar-navbar{text-align:right;font-size:115%;padding:0 0.4em 0.4em}.mw-parser-output .sidebar-list-title{padding:0 0.4em;text-align:left;font-weight:bold;line-height:1.6em;font-size:105%}.mw-parser-output .sidebar-list-title-c{padding:0 0.4em;text-align:center;margin:0 3.3em}@media(max-width:640px){body.mediawiki .mw-parser-output .sidebar{width:100%!important;clear:both;float:none!important;margin-left:0!important;margin-right:0!important}}body.skin--responsive .mw-parser-output .sidebar a>img{max-width:none!important}@media screen{html.skin-theme-clientpref-night .mw-parser-output .sidebar:not(.notheme) .sidebar-list-title,html.skin-theme-clientpref-night .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle{background:transparent!important}html.skin-theme-clientpref-night .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle a{color:var(--color-progressive)!important}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .sidebar:not(.notheme) .sidebar-list-title,html.skin-theme-clientpref-os .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle{background:transparent!important}html.skin-theme-clientpref-os .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle a{color:var(--color-progressive)!important}}@media print{body.ns-0 .mw-parser-output .sidebar{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><table class="sidebar nomobile nowraplinks"><tbody><tr><th class="sidebar-title"><a href="Execution_(computing)" title="Execution (computing)">Program execution</a></th></tr><tr><th class="sidebar-heading">
General concepts</th></tr><tr><td class="sidebar-content hlist">
<ul><li><a href="Computer_program" title="Computer program">Code</a></li>
<li><a href="Translator_(computing)" title="Translator (computing)">Translation</a>
<ul><li><a href="Compiler" title="Compiler">Compiler</a></li>
<li><a href="Compile_time" title="Compile time">Compile time</a></li>
<li><a href="Optimizing_compiler" title="Optimizing compiler">Optimizing compiler</a></li></ul></li>
<li><a href="Linker_(computing)" title="Linker (computing)"> Linking</a></li>
<li><a href="Execution_(computing)" title="Execution (computing)">Execution</a>
<ul><li><a href="Runtime_system" title="Runtime system">Runtime system</a></li>
<li><a href="Executable" title="Executable">Executable</a></li>
<li><a href="Interpreter_(computing)" title="Interpreter (computing)">Interpreter</a></li>
<li><a href="Virtual_machine" title="Virtual machine">Virtual machine</a></li></ul></li>
<li><a href="Intermediate_representation" title="Intermediate representation">Intermediate representation</a> (IR)</li></ul></td>
</tr><tr><th class="sidebar-heading">
Types of code</th></tr><tr><td class="sidebar-content hlist">
<ul><li><a href="Source_code" title="Source code">Source code</a></li>
<li><a href="Object_code" title="Object code">Object code</a></li>
<li><a href="Bytecode" title="Bytecode">Bytecode</a></li>
<li><a href="Machine_code" title="Machine code">Machine code</a></li>
<li><a href="Microcode" title="Microcode">Microcode</a></li></ul></td>
</tr><tr><th class="sidebar-heading">
Compilation strategies</th></tr><tr><td class="sidebar-content hlist">
<ul><li><a href="Ahead-of-time_compilation" title="Ahead-of-time compilation">Ahead-of-time</a> (AOT)</li>
<li><a href="Just-in-time_compilation" title="Just-in-time compilation">Just-in-time</a> (JIT)
<ul><li><a href="Tracing_just-in-time_compilation" title="Tracing just-in-time compilation">Tracing just-in-time</a></li>
<li><a href="Compile_and_go_system" title="Compile and go system">Compile and go system</a></li></ul></li>
<li><a href="Precompilation" class="mw-redirect" title="Precompilation">Precompilation</a></li>
<li><a href="Source-to-source_compiler" title="Source-to-source compiler">Transcompilation</a></li>
<li><a href="Dynamic_recompilation" title="Dynamic recompilation">Recompilation</a></li></ul></td>
</tr><tr><th class="sidebar-heading">
Notable runtimes</th></tr><tr><td class="sidebar-content hlist">
<ul><li><a href="Android_Runtime" title="Android Runtime">Android Runtime</a> (ART)</li>
<li><a href="BEAM_(Erlang_virtual_machine)" title="BEAM (Erlang virtual machine)">BEAM</a> (Erlang)</li>
<li><a href="Common_Language_Runtime" title="Common Language Runtime">Common Language Runtime</a> (CLR) and&nbsp;<a href="Mono_(software)#Code_Execution_Engine" title="Mono (software)">Mono</a></li>
<li><a href="CPython" title="CPython">CPython</a> and&nbsp;<a href="PyPy" title="PyPy">PyPy</a></li>
<li><a href="Crt0" title="Crt0">crt0</a> (<a href="C_(programming_language)" title="C (programming language)">C</a> target-specific initializer)</li>
<li><a href="Java_virtual_machine" title="Java virtual machine">Java virtual machine</a> (JVM)</li>
<li><a href="LuaJIT" title="LuaJIT">LuaJIT</a></li>
<li><a href="Objective-C" title="Objective-C">Objective-C</a> and&nbsp;<a href="Swift_(programming_language)" title="Swift (programming language)">Swift</a>'s</li>
<li><a href="V8_(JavaScript_engine)" title="V8 (JavaScript engine)">V8</a> and&nbsp;<a href="Node.js" title="Node.js">Node.js</a></li>
<li><a href="Zend_Engine" title="Zend Engine">Zend Engine</a> (PHP)</li></ul></td>
</tr><tr><th class="sidebar-heading">
Notable compilers &amp; toolchains</th></tr><tr><td class="sidebar-content hlist">
<ul><li><a href="GNU_Compiler_Collection" title="GNU Compiler Collection">GNU Compiler Collection</a> (GCC)</li>
<li><a href="LLVM" title="LLVM">LLVM</a> and&nbsp;<a href="Clang" title="Clang">Clang</a></li>
<li><a href="Microsoft_Visual_C%2B%2B" title="Microsoft Visual C++">MSVC</a></li>
<li><a href="Glasgow_Haskell_Compiler" title="Glasgow Haskell Compiler">Glasgow Haskell Compiler</a> (GHC)</li></ul></td>
</tr><tr><td class="sidebar-navbar"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */


.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}


/* end https://en.wikipedia.org/ */
</style></td></tr></tbody></table>
<p>In <a href="Software_engineering" title="Software engineering">software engineering</a>, <b>code coverage</b>, also called <b>test coverage</b>, is a percentage measure of the degree to which the <a href="Source_code" title="Source code">source code</a> of a <a href="Computer_program" title="Computer program">program</a> is executed when a particular <a href="Test_suite" title="Test suite">test suite</a> is run. A program with high code coverage has more of its source code executed during testing, which suggests it has a lower chance of containing undetected <a href="Software_bug" title="Software bug">software bugs</a> compared to a program with low code coverage.<sup id="cite_ref-Brader,_2013_1-0" class="reference"><a href="#cite_note-Brader,_2013-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-Williams_2003_2-0" class="reference"><a href="#cite_note-Williams_2003-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> Many different metrics can be used to calculate test coverage. Some of the most basic are the percentage of program <a href="Subroutine" class="mw-redirect" title="Subroutine">subroutines</a> and the percentage of program <a href="Statement_(computer_science)" title="Statement (computer science)">statements</a> called during execution of the test suite.
</p><p>Code coverage was among the first methods invented for systematic <a href="Software_testing" title="Software testing">software testing</a>. The first published reference was by Miller and Maloney in <i><a href="Communications_of_the_ACM" title="Communications of the ACM">Communications of the ACM</a></i>, in 1963.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Coverage_criteria">Coverage criteria</h2></div>
<p>To measure what percentage of code has been executed by a <a href="Test_suite" title="Test suite">test suite</a>, one or more <i>coverage criteria</i> are used. These are usually defined as rules or requirements, which a test suite must satisfy.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Basic_coverage_criteria">Basic coverage criteria</h3></div>
<p>There are a number of coverage criteria, but the main ones are:<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li><b>Function coverage</b>&nbsp;– has each function (or <a href="Subroutine" class="mw-redirect" title="Subroutine">subroutine</a>) in the program been called?</li>
<li><b>Statement coverage</b>&nbsp;– has each <a href="Statement_(computer_science)" title="Statement (computer science)">statement</a> in the program been executed?</li>
<li><b>Edge coverage</b>&nbsp;– has every <a href="Graph_theory" title="Graph theory">edge</a> in the <a href="Control-flow_graph" title="Control-flow graph">control-flow graph</a> been executed?
<ul><li><b>Branch coverage</b>&nbsp;– has each branch (also called the <a href="DD-path" class="mw-redirect" title="DD-path">DD-path</a>) of each control structure (such as in <a href="Conditional_(programming)" class="mw-redirect" title="Conditional (programming)"><i>if</i> and <i>case</i> statements</a>) been executed? For example, given an <i>if</i> statement, have both the <i>true</i> and <i>false</i> branches been executed? (This is a subset of edge coverage<b>.</b>)</li></ul></li>
<li><b>Condition coverage</b>&nbsp;– has each Boolean sub-expression evaluated both to true and false? (Also called predicate coverage.)</li></ul>
<p>For example, consider the following <a href="C_(programming_language)" title="C (programming language)">C</a> function:
</p>
<div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span class="kt">int</span><span class="w"> </span><span class="nf">foo</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">y</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">z</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">x</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="p">(</span><span class="n">y</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mi">0</span><span class="p">))</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">z</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">x</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">z</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<p>Assume this function is a part of some bigger program and this program was run with some test suite.
</p>
<ul><li><i>Function coverage</i> will be satisfied if, during this execution, the function <code>foo</code> was called at least once.</li>
<li><i>Statement coverage</i> for this function will be satisfied if it was called for example as <code>foo(1,1)</code>, because in this case, every line in the function would be executed—including <code>z = x;</code>.</li>
<li><i>Branch coverage</i> will be satisfied by tests calling <code>foo(1,1)</code> and <code>foo(0,1)</code> because, in the first case, both <code>if</code> conditions are met and <code>z = x;</code> is executed, while in the second case, the first condition, <code>(x&gt;0)</code>, is not satisfied, which prevents the execution of <code>z = x;</code>.</li>
<li><i>Condition coverage</i> will be satisfied with tests that call <code>foo(1,0)</code>, <code>foo(0,1)</code>, and <code>foo(1,1)</code>. These are necessary because in the first case, <code>(x&gt;0)</code> is evaluated to <code>true</code>, while in the second, it is evaluated to <code>false</code>. At the same time, the first case makes <code>(y&gt;0)</code> <code>false</code>, the second case does not evaluate <code>(y&gt;0)</code> (because of the lazy-evaluation of the Boolean operator), the third case makes it <code>true</code>.</li></ul>
<p>In programming languages that do not perform <a href="Short-circuit_evaluation" title="Short-circuit evaluation">short-circuit evaluation</a>, condition coverage does not necessarily imply branch coverage. For example, consider the following <a href="Pascal_(programming_language)" title="Pascal (programming language)">Pascal</a> code fragment:
</p>
<div class="mw-highlight mw-highlight-lang-pascal mw-content-ltr" dir="ltr"><pre><span class="k">if</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="k">and</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="k">then</span>
</pre></div>
<p>Condition coverage can be satisfied by two tests:
</p>
<ul><li><code>a=true</code>, <code>b=false</code></li>
<li><code>a=false</code>, <code>b=true</code></li></ul>
<p>However, this set of tests does not satisfy branch coverage since neither case will meet the <code>if</code> condition.
</p><p><a href="Fault_injection" title="Fault injection">Fault injection</a> may be necessary to ensure that all conditions and branches of <a href="Exception_handling" title="Exception handling">exception-handling</a> code have adequate coverage during testing.
</p>
<div class="mw-heading mw-heading3"><h3 id="Modified_condition/decision_coverage">Modified condition/decision coverage</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Modified_condition/decision_coverage" title="Modified condition/decision coverage">Modified condition/decision coverage</a></div>
<p>A combination of function coverage and branch coverage is sometimes also called <b>decision coverage</b>. This criterion requires that every <a href="Entry_and_exit_points" class="mw-redirect" title="Entry and exit points">point of entry and exit</a> in the program has been invoked at least once, and every decision in the program has taken on all possible outcomes at least once. In this context, the decision is a <a href="Boolean_expression" title="Boolean expression">Boolean expression</a> comprising conditions and zero or more Boolean operators. This definition is not the same as branch coverage,<sup id="cite_ref-Position_Paper_CAST10_6-0" class="reference"><a href="#cite_note-Position_Paper_CAST10-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> however, the term <i>decision coverage</i> is sometimes used as a synonym for it.<sup id="cite_ref-mathworks_7-0" class="reference"><a href="#cite_note-mathworks-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup>
</p><p><b>Condition/decision coverage</b> requires that both decision and condition coverage be satisfied. However, for <a href="Safety-critical" class="mw-redirect" title="Safety-critical">safety-critical</a> applications (such as <a href="Avionics_software" title="Avionics software">avionics software</a>) it is often required that <b>modified condition/decision coverage (MC/DC)</b> be satisfied. This criterion extends condition/decision criteria with requirements that each condition should affect the decision outcome independently.
</p><p>For example, consider the following code:
</p>
<div class="mw-highlight mw-highlight-lang-pascal mw-content-ltr" dir="ltr"><pre><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">a</span><span class="w"> </span><span class="k">or</span><span class="w"> </span><span class="n">b</span><span class="p">)</span><span class="w"> </span><span class="k">and</span><span class="w"> </span><span class="n">c</span><span class="w"> </span><span class="k">then</span>
</pre></div>
<p>The condition/decision criteria will be satisfied by the following set of tests:
</p>
<table class="wikitable">

<tbody><tr>
<th>a</th>
<th>b</th>
<th>c
</th></tr>
<tr>
<td>true</td>
<td>true</td>
<td>true
</td></tr>
<tr>
<td>false</td>
<td>false</td>
<td>false
</td></tr></tbody></table>
<p>However, the above tests set will not satisfy modified condition/decision coverage, since in the first test, the value of 'b' and in the second test the value of 'c' would not influence the output. So, the following test set is needed to satisfy MC/DC:
</p>
<table class="wikitable">

<tbody><tr>
<th>a</th>
<th>b</th>
<th>c
</th></tr>
<tr>
<td>false</td>
<td>true</td>
<td><b>false</b>
</td></tr>
<tr>
<td>false</td>
<td><b>true</b></td>
<td><b>true</b>
</td></tr>
<tr>
<td><b>false</b></td>
<td><b>false</b></td>
<td>true
</td></tr>
<tr>
<td><b>true</b></td>
<td>false</td>
<td><b>true</b>
</td></tr></tbody></table>
<div class="mw-heading mw-heading3"><h3 id="Multiple_condition_coverage">Multiple condition coverage</h3></div>
<p>This criterion requires that all combinations of conditions inside each decision are tested. For example, the code fragment from the previous section will require eight tests:
</p>
<table class="wikitable">

<tbody><tr>
<th>a</th>
<th>b</th>
<th>c
</th></tr>
<tr>
<td>false</td>
<td>false</td>
<td>false
</td></tr>
<tr>
<td>false</td>
<td>false</td>
<td>true
</td></tr>
<tr>
<td>false</td>
<td>true</td>
<td>false
</td></tr>
<tr>
<td>false</td>
<td>true</td>
<td>true
</td></tr>
<tr>
<td>true</td>
<td>false</td>
<td>false
</td></tr>
<tr>
<td>true</td>
<td>false</td>
<td>true
</td></tr>
<tr>
<td>true</td>
<td>true</td>
<td>false
</td></tr>
<tr>
<td>true</td>
<td>true</td>
<td>true
</td></tr></tbody></table>
<div class="mw-heading mw-heading3"><h3 id="Parameter_value_coverage">Parameter value coverage</h3></div>
<p><b>Parameter value coverage</b> (PVC) requires that in a method taking parameters, all the common values for such parameters be considered. The idea is that all common possible values for a parameter are tested.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup> For example, common values for a string are: 1) <a href="Null_object" class="mw-redirect" title="Null object">null</a>, 2) empty, 3) whitespace (space, tabs, newline), 4) valid string, 5) invalid string, 6) single-byte string, 7) double-byte string. It may also be appropriate to use very long strings. Failure to test each possible parameter value may result in a bug. Testing only one of these could result in 100% code coverage as each line is covered, but as only one of seven options are tested, there is only 14.2% PVC.
</p>
<div class="mw-heading mw-heading3"><h3 id="Other_coverage_criteria">Other coverage criteria</h3></div>
<p>There are further coverage criteria, which are used less often:
</p>
<ul><li><b><a href="Linear_Code_Sequence_and_Jump" class="mw-redirect" title="Linear Code Sequence and Jump">Linear Code Sequence and Jump</a> (LCSAJ) coverage</b> a.k.a. <b>JJ-Path coverage</b>&nbsp;– has every LCSAJ/JJ-path been executed?<sup id="cite_ref-On_the_relationship_between_two_control-flow_coverage_criteria:_all_JJ-paths_and_MCDC_9-0" class="reference"><a href="#cite_note-On_the_relationship_between_two_control-flow_coverage_criteria:_all_JJ-paths_and_MCDC-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup></li>
<li><b>Path coverage</b>&nbsp;– Has every possible route through a given part of the code been executed?</li>
<li><b>Entry/exit coverage</b>&nbsp;– Has every possible call and return of the function been executed?</li>
<li><b>Loop coverage</b>&nbsp;– Has every possible loop been executed zero times, once, and more than once?</li>
<li><b>State coverage</b>&nbsp;– Has each state in a <a href="Finite-state_machine" title="Finite-state machine">finite-state machine</a> been reached and explored?</li>
<li><b>Data-flow coverage</b>&nbsp;– Has each variable definition and its usage been reached and explored?<sup id="cite_ref-A_Survey_on_Data-Flow_Testing_10-0" class="reference"><a href="#cite_note-A_Survey_on_Data-Flow_Testing-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup></li></ul>
<p><a href="Safety-critical" class="mw-redirect" title="Safety-critical">Safety-critical</a> or <a href="Dependability" title="Dependability">dependable</a> applications are often required to demonstrate 100% of some form of test coverage.
For example, the <a href="European_Cooperation_for_Space_Standardization" title="European Cooperation for Space Standardization">ECSS</a>-E-ST-40C standard demands 100% statement and decision coverage for two out of four different criticality levels; for the other ones, target coverage values are up to negotiation between supplier and customer.<sup id="cite_ref-ECSS-E-ST-40C_11-0" class="reference"><a href="#cite_note-ECSS-E-ST-40C-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup>
However, setting specific target values - and, in particular, 100% - has been criticized by practitioners for various reasons (cf.<sup id="cite_ref-is_100_percent_reasonable_12-0" class="reference"><a href="#cite_note-is_100_percent_reasonable-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup>)
<a href="Martin_Fowler_(software_engineer)" title="Martin Fowler (software engineer)">Martin Fowler</a> writes: "I would be suspicious of anything like 100% - it would smell of someone writing tests to make the coverage numbers happy, but not thinking about what they are doing".<sup id="cite_ref-fowler_blog_13-0" class="reference"><a href="#cite_note-fowler_blog-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup>
</p><p>Some of the coverage criteria above are connected. For instance, path coverage implies decision, statement and entry/exit coverage. Decision coverage implies statement coverage, because every statement is part of a branch.
</p><p>Full path coverage, of the type described above, is usually impractical or impossible. Any module with a succession of <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle n}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>n</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle n}</annotation>
</semantics>
</math></span><img src="./a601995d55609f2d9f5e233e36fbe9ea26011b3b.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.395ex; height:1.676ex;" alt="{\displaystyle n}" loading="lazy"></span> decisions in it can have up to <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle 2^{n}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msup>
<mn>2</mn>
<mrow class="MJX-TeXAtom-ORD">
<mi>n</mi>
</mrow>
</msup>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle 2^{n}}</annotation>
</semantics>
</math></span><img src="./8226f30650ee4fe4e640c6d2798127e80e9c160d.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.381ex; height:2.343ex;" alt="{\displaystyle 2^{n}}" loading="lazy"></span> paths within it; loop constructs can result in an infinite number of paths. Many paths may also be infeasible, in that there is no input to the program under test that can cause that particular path to be executed. However, a general-purpose algorithm for identifying infeasible paths has been proven to be impossible (such an algorithm could be used to solve the <a href="Halting_problem" title="Halting problem">halting problem</a>).<sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup> <a href="Basis_path_testing" title="Basis path testing">Basis path testing</a> is for instance a method of achieving complete branch coverage without achieving complete path coverage.<sup id="cite_ref-SrikantShankar2002_15-0" class="reference"><a href="#cite_note-SrikantShankar2002-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup>
</p><p>Methods for practical path coverage testing instead attempt to identify classes of code paths that differ only in the number of loop executions, and to achieve "basis path" coverage the tester must cover all the path classes.
</p>
<div class="mw-heading mw-heading2"><h2 id="In_practice">In practice</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1251242444">
/* start https://en.wikipedia.org/ */


.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><p>The target software is built with special options or libraries and run under a controlled environment, to map every executed function to the function points in the source code. This allows testing parts of the target software that are rarely or never accessed under normal conditions, and helps reassure that the most important conditions (function points) have been tested. The resulting output is then analyzed to see what areas of code have not been exercised and the tests are updated to include these areas as necessary. Combined with other test coverage methods, the aim is to develop a rigorous, yet manageable, set of regression tests.
</p><p>In implementing test coverage policies within a software development environment, one must consider the following:
</p>
<ul><li>What are coverage requirements for the end product certification and if so what level of test coverage is required? The typical level of rigor progression is as follows: Statement, Branch/Decision, <a href="Modified_Condition/Decision_Coverage" class="mw-redirect" title="Modified Condition/Decision Coverage">Modified Condition/Decision Coverage</a> (MC/DC), LCSAJ (<a href="Linear_Code_Sequence_and_Jump" class="mw-redirect" title="Linear Code Sequence and Jump">Linear Code Sequence and Jump</a>)</li>
<li>Will coverage be measured against tests that verify requirements levied on the system under test (<a href="DO-178B" title="DO-178B">DO-178B</a>)?</li>
<li>Is the object code generated directly traceable to source code statements? Certain certifications, (i.e. DO-178B Level A) require coverage at the assembly level if this is not the case: "Then, additional verification should be performed on the object code to establish the correctness of such generated code sequences" (<a href="DO-178B" title="DO-178B">DO-178B</a>) para-6.4.4.2.<sup id="cite_ref-DO-178B_16-0" class="reference"><a href="#cite_note-DO-178B-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup></li></ul>
<p>Software authors can look at test coverage results to devise additional tests and input or configuration sets to increase the coverage over vital functions. Two common forms of test coverage are statement (or line) coverage and branch (or edge) coverage. Line coverage reports on the execution footprint of testing in terms of which lines of code were executed to complete the test. Edge coverage reports which branches or code decision points were executed to complete the test. They both report a coverage metric, measured as a percentage. The meaning of this depends on what form(s) of coverage have been used, as 67% branch coverage is more comprehensive than 67% statement coverage.
</p><p>Generally, test coverage tools incur computation and logging in addition to the actual program thereby slowing down the application, so typically this analysis is not done in production. As one might expect, there are classes of software that cannot be feasibly subjected to these coverage tests, though a degree of coverage mapping can be approximated through analysis rather than direct testing.
</p><p>There are also some sorts of defects which are affected by such tools. In particular, some <a href="Race_condition" title="Race condition">race conditions</a> or similar <a href="Real-time_computing" title="Real-time computing">real time</a> sensitive operations can be masked when run under test environments; though conversely, some of these defects may become easier to find as a result of the additional overhead of the testing code.
</p><p>Most professional software developers use C1 and C2 coverage. C1 stands for statement coverage and C2 for branch or condition coverage. With a combination of C1 and C2, it is possible to cover most statements in a code base. Statement coverage would also cover function coverage with entry and exit, loop, path, state flow, control flow and data flow coverage. With these methods, it is possible to achieve nearly 100% code coverage in most software projects.<sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Notable_code_coverage_tools">Notable code coverage tools</h3></div>
<div class="mw-heading mw-heading4"><h4 id="Hardware_manufacturers">Hardware manufacturers</h4></div>
<ul><li><a href="Aldec" title="Aldec">Aldec</a></li>
<li><a href="Mentor_Graphics" title="Mentor Graphics">Mentor Graphics</a></li>
<li><a href="Silvaco" title="Silvaco">Silvaco</a></li>
<li><a href="Synopsys" title="Synopsys">Synopsys</a></li></ul>
<div class="mw-heading mw-heading4"><h4 id="Software">Software</h4></div>
<ul><li><a href="LDRA_Testbed" class="mw-redirect" title="LDRA Testbed">LDRA Testbed</a></li>
<li><a href="Parasoft" title="Parasoft">Parasoft</a></li></ul>
<div class="mw-heading mw-heading5"><h5 id="C_/_C++"><a href="C_(programming_language)" title="C (programming language)">C</a> / <a href="C%2B%2B" title="C++">C++</a></h5></div>
<ul><li><a href="Cantata%2B%2B" title="Cantata++">Cantata++</a></li>
<li><a href="Gcov" title="Gcov">Gcov</a></li>
<li><a href="Insure%2B%2B" title="Insure++">Insure++</a></li>
<li><a href="LDRA_Testbed" class="mw-redirect" title="LDRA Testbed">LDRA Testbed</a></li>
<li><a href="Tcov" title="Tcov">Tcov</a></li>
<li>Testwell CTC++</li>
<li><a href="Trucov" title="Trucov">Trucov</a></li>
<li><a href="Squish_(Froglogic)" title="Squish (Froglogic)">Squish (Froglogic)</a></li></ul>
<div class="mw-heading mw-heading5"><h5 id="C#_.NET"><a href="C_Sharp_(programming_language)" title="C Sharp (programming language)">C#</a> <a href=".NET" title=".NET">.NET</a></h5></div>
<ul><li><a href="DevPartner_Studio" class="mw-redirect" title="DevPartner Studio">DevPartner Studio</a></li>
<li><a href="JetBrains" title="JetBrains">JetBrains</a></li>
<li><a href="NCover" title="NCover">NCover</a></li></ul>
<div class="mw-heading mw-heading5"><h5 id="Java"><a href="Java_(programming_language)" title="Java (programming language)">Java</a></h5></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Java_code_coverage_tools" title="Java code coverage tools">Java code coverage tools</a></div>
<ul><li><a href="Clover_(software)" class="mw-redirect" title="Clover (software)">Clover</a></li>
<li><a href="DevPartner_Java" class="mw-redirect" title="DevPartner Java">DevPartner Java</a></li>
<li><a href="EMMA_(code_coverage_tool)" class="mw-redirect" title="EMMA (code coverage tool)">EMMA</a></li>
<li><a href="Jtest" title="Jtest">Jtest</a></li>
<li><a href="LDRA_Testbed" class="mw-redirect" title="LDRA Testbed">LDRA Testbed</a></li></ul>
<div class="mw-heading mw-heading5"><h5 id="PHP"><a href="PHP" title="PHP">PHP</a></h5></div>
<ul><li><a href="PHPUnit" title="PHPUnit">PHPUnit</a>, also need <a href="Xdebug" title="Xdebug">Xdebug</a> to make coverage reports</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Usage_in_industry">Usage in industry</h2></div>
<p>Test coverage is one consideration in the safety certification of avionics equipment. The guidelines by which avionics gear is certified by the <a href="Federal_Aviation_Administration" title="Federal Aviation Administration">Federal Aviation Administration</a> (FAA) is documented in <a href="DO-178B" title="DO-178B">DO-178B</a><sup id="cite_ref-DO-178B_16-1" class="reference"><a href="#cite_note-DO-178B-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup> and <a href="DO-178C" title="DO-178C">DO-178C</a>.<sup id="cite_ref-DO-178C_18-0" class="reference"><a href="#cite_note-DO-178C-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup>
</p><p>Test coverage is also a requirement in part 6 of the automotive safety standard <a href="ISO_26262" title="ISO 26262">ISO 26262</a> <i>Road Vehicles - Functional Safety</i>.<sup id="cite_ref-ISO26262part6_19-0" class="reference"><a href="#cite_note-ISO26262part6-19"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="Cyclomatic_complexity" title="Cyclomatic complexity">Cyclomatic complexity</a></li>
<li><a href="Intelligent_verification" title="Intelligent verification">Intelligent verification</a></li>
<li><a href="Linear_code_sequence_and_jump" title="Linear code sequence and jump">Linear code sequence and jump</a></li>
<li><a href="Modified_condition/decision_coverage" title="Modified condition/decision coverage">Modified condition/decision coverage</a></li>
<li><a href="Mutation_testing" title="Mutation testing">Mutation testing</a></li>
<li><a href="Regression_testing" title="Regression testing">Regression testing</a></li>
<li><a href="Software_metric" title="Software metric">Software metric</a></li>
<li><a href="Static_program_analysis" title="Static program analysis">Static program analysis</a></li>
<li><a href="White-box_testing" title="White-box testing">White-box testing</a></li>
<li><a href="Java_code_coverage_tools" title="Java code coverage tools">Java code coverage tools</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */


.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}


/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap mw-references-columns"><ol class="references">
<li id="cite_note-Brader,_2013-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-Brader,_2013_1-0">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */


.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}


/* end https://en.wikipedia.org/ */
</style><cite id="CITEREFBraderHillikerWills2013" class="citation book cs1">Brader, Larry; Hilliker, Howie; Wills, Alan (March 2, 2013). "Chapter 2 Unit Testing: Testing the Inside". <a rel="nofollow" class="external text" href="https://msdn.microsoft.com/en-us/library/jj159344.aspx"><i>Testing for Continuous Delivery with Visual Studio 2012</i></a>. Microsoft. p.&nbsp;30. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>978-1621140184</bdi><span class="reference-accessdate">. Retrieved <span class="nowrap">16 June</span> 2016</span>.</cite></span>
</li>
<li id="cite_note-Williams_2003-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-Williams_2003_2-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFWilliamsSmithHeckman" class="citation web cs1"><a href="Laurie_Williams_(software_engineer)" title="Laurie Williams (software engineer)">Williams, Laurie</a>; Smith, Ben; Heckman, Sarah. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20160314023040/http://realsearchgroup.org/SEMaterials/tutorials/eclemma/">"Test Coverage with EclEmma"</a>. <i>Open Seminar Software Engineering</i>. North Carolina State University. Archived from <a rel="nofollow" class="external text" href="http://realsearchgroup.org/SEMaterials/tutorials/eclemma">the original</a> on 14 March 2016<span class="reference-accessdate">. Retrieved <span class="nowrap">16 June</span> 2016</span>.</cite></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><cite id="CITEREFJoan_C._Miller,_Clifford_J._Maloney1963" class="citation journal cs1">Joan C. Miller, Clifford J. Maloney (February 1963). <a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F366246.366248">"Systematic mistake analysis of digital computer programs"</a>. <i><a href="Communications_of_the_ACM" title="Communications of the ACM">Communications of the ACM</a></i>. <b>6</b> (2). New York, NY, USA: <a href="Association_for_Computing_Machinery" title="Association for Computing Machinery">ACM</a>: <span class="nowrap">58–</span>63. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F366246.366248">10.1145/366246.366248</a></span>. <a href="ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a>&nbsp;<a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0001-0782">0001-0782</a>.</cite></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><cite id="CITEREFPaul_Ammann,_Jeff_Offutt2013" class="citation book cs1">Paul Ammann, Jeff Offutt (2013). <i>Introduction to Software Testing</i>. Cambridge University Press.</cite></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><cite id="CITEREFGlenford_J._Myers2004" class="citation book cs1">Glenford J. Myers (2004). <i>The Art of Software Testing, 2nd edition</i>. Wiley. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>0-471-46912-2</bdi>.</cite></span>
</li>
<li id="cite_note-Position_Paper_CAST10-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-Position_Paper_CAST10_6-0">^</a></b></span> <span class="reference-text">Position Paper CAST-10 (June 2002). <i><a rel="nofollow" class="external text" href="http://www.faa.gov/aircraft/air_cert/design_approvals/air_software/cast/cast_papers/media/cast-10.pdf">What is a "Decision" in Application of Modified Condition/Decision Coverage (MC/DC) and Decision Coverage (DC)?</a></i></span>
</li>
<li id="cite_note-mathworks-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-mathworks_7-0">^</a></b></span> <span class="reference-text">MathWorks. <i><a rel="nofollow" class="external text" href="http://www.mathworks.com/help/slvnv/ug/types-of-model-coverage.html">Types of Model Coverage.</a></i></span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.rhyous.com/2012/05/08/unit-testing-with-parameter-value-coverage-pvc/">"Unit Testing with Parameter Value Coverage (PVC)"</a>.</cite></span>
</li>
<li id="cite_note-On_the_relationship_between_two_control-flow_coverage_criteria:_all_JJ-paths_and_MCDC-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-On_the_relationship_between_two_control-flow_coverage_criteria:_all_JJ-paths_and_MCDC_9-0">^</a></b></span> <span class="reference-text">M. R. Woodward, M. A. Hennell, "On the relationship between two control-flow coverage criteria: all JJ-paths and MCDC", Information and Software Technology 48 (2006) pp. 433-440</span>
</li>
<li id="cite_note-A_Survey_on_Data-Flow_Testing-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-A_Survey_on_Data-Flow_Testing_10-0">^</a></b></span> <span class="reference-text">Ting Su, Ke Wu, Weikai Miao, Geguang Pu, Jifeng He, Yuting Chen, and Zhendong Su. "A Survey on Data-Flow Testing". ACM Comput. Surv. 50, 1, Article 5 (March 2017), 35 pages.</span>
</li>
<li id="cite_note-ECSS-E-ST-40C-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-ECSS-E-ST-40C_11-0">^</a></b></span> <span class="reference-text">ECSS-E-ST-40C: Space engineering - Software. ECSS Secretariat, ESA-ESTEC. March, 2009</span>
</li>
<li id="cite_note-is_100_percent_reasonable-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-is_100_percent_reasonable_12-0">^</a></b></span> <span class="reference-text">C. Prause, J. Werner, K. Hornig, S. Bosecker, M. Kuhrmann (2017): <i><a rel="nofollow" class="external text" href="https://www.researchgate.net/profile/Marco_Kuhrmann/publication/319141355_Is_100_Test_Coverage_a_Reasonable_Requirement_Lessons_Learned_from_a_Space_Software_Project/links/599467faaca272ec9087f82a/Is-100-Test-Coverage-a-Reasonable-Requirement-Lessons-Learned-from-a-Space-Software-Project.pdf">Is 100% Test Coverage a Reasonable Requirement? Lessons Learned from a Space Software Project</a></i>. In: PROFES 2017. Springer. Last accessed: 2017-11-17</span>
</li>
<li id="cite_note-fowler_blog-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-fowler_blog_13-0">^</a></b></span> <span class="reference-text">Martin Fowler's blog: <a rel="nofollow" class="external text" href="https://martinfowler.com/bliki/TestCoverage.html">TestCoverage.</a> Last accessed: 2017-11-17</span>
</li>
<li id="cite_note-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-14">^</a></b></span> <span class="reference-text">Dorf, Richard C.: <i>Computers, Software Engineering, and Digital Devices</i>, Chapter 12, pg. 15. CRC Press, 2006. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>0-8493-7340-9</bdi>, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>978-0-8493-7340-4</bdi>; via <a rel="nofollow" class="external text" href="https://books.google.com/books?id=jykvlTCoksMC&amp;dq=%22infeasible+path%22+%22halting+problem%22&amp;pg=PT386">Google Book Search</a></span>
</li>
<li id="cite_note-SrikantShankar2002-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-SrikantShankar2002_15-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFY.N._SrikantPriti_Shankar2002" class="citation book cs1">Y.N. Srikant; Priti Shankar (2002). <i>The Compiler Design Handbook: Optimizations and Machine Code Generation</i>. CRC Press. p.&nbsp;249. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>978-1-4200-4057-9</bdi>.</cite></span>
</li>
<li id="cite_note-DO-178B-16"><span class="mw-cite-backlink">^ <a href="#cite_ref-DO-178B_16-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-DO-178B_16-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text">RTCA/<a href="DO-178B" title="DO-178B">DO-178B</a>, <i>Software Considerations in Airborne Systems and Equipment Certification, Radio Technical Commission for Aeronautics,</i> December 1, 1992</span>
</li>
<li id="cite_note-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-17">^</a></b></span> <span class="reference-text"><cite id="CITEREFBoris_beizer2009" class="citation book cs1">Boris beizer (2009). <i>Software testing techniques, 2nd edition</i>. Dreamtech press. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>978-81-7722-260-9</bdi>.</cite></span>
</li>
<li id="cite_note-DO-178C-18"><span class="mw-cite-backlink"><b><a href="#cite_ref-DO-178C_18-0">^</a></b></span> <span class="reference-text">RTCA/<a href="DO-178C" title="DO-178C">DO-178C</a>, <i>Software Considerations in Airborne Systems and Equipment Certification, Radio Technical Commission for Aeronautics,</i> January, 2012.</span>
</li>
<li id="cite_note-ISO26262part6-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-ISO26262part6_19-0">^</a></b></span> <span class="reference-text"><cite class="citation book cs1"><a rel="nofollow" class="external text" href="http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=51362"><i>ISO 26262-6:2011(en) Road vehicles -- Functional safety -- Part 6: Product development at the software level</i></a>. International Standardization Organization.</cite></span>
</li>
</ol></div></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-02-14" href="https://en.wikipedia.org/wiki/?title=Code_coverage&amp;oldid=1275691747">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>